package com.xiaogao.common.config.thread;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;

@Configuration
public class ThreadPoolConfig {
    /**
     * 登录日志记录专用线程池
     *
     * @return 线程池实例
     */
    @Bean("logLoginExecutor")
    public ExecutorService logLoginExecutor() {
        return new ThreadPoolExecutor(
                // 核心线程数：保持活跃的线程数量（即使空闲也不会被回收）
                5,
                // 最大线程数：线程池允许创建的最大线程数
                10,
                // 空闲线程存活时间：超过核心线程数的空闲线程多久后被回收
                60L,
                // 时间单位：秒
                TimeUnit.SECONDS,
                // 工作队列：用于存放待执行任务的阻塞队列
                new LinkedBlockingQueue<>(1000),
                // 线程工厂：用于创建新线程
                new NamedThreadFactory("login-log-pool"),
                // 拒绝策略：当线程池和队列都满时的处理策略
                new ThreadPoolExecutor.CallerRunsPolicy()
        );
    }
}
